package com.somnus.androidkotlindemo.activity

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v4.graphics.ColorUtils
import android.support.v7.app.AppCompatActivity
import android.util.Log
import com.somnus.androidkotlindemo.R
import com.somnus.androidkotlindemo.bean.KotlinBean
import com.somnus.androidkotlindemo.kt.ktColor
import com.somnus.androidkotlindemo.kt.ktToDateString
import kotlinx.android.synthetic.main.activity_sencond.*
import java.net.URL

/**
 * Kotlin  界面传值
 * 使用Kotlin 基本网络请求
 */
class KotlinBeanActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sencond)
        var mKot: KotlinBean = intent.getSerializableExtra(bean) as KotlinBean
        textView.text = mKot.toString()

        val url = "http://www.kuaidi100.com/query?type=yuantong&postid=11111111111"
        Request(url).run()

        val mKtBean = KotlinBean("测试", 1)
        //你可以拷贝一个对象，可以根据你的需要去修改里面的属性。
        val mCopyBean: KotlinBean = mKtBean.copy()
        mCopyBean.name = "CopyName"

        Log.d("kt", mKtBean.name)
        Log.d("kt1", mCopyBean.name)

        this.ktColor(R.color.colorAccent)

        //使用 lambda 表达式来过滤（filter）和映射（map）集合：

        val fruits = listOf("banana", "avocado", "apple", "kiwi")
        fruits.filter { it.startsWith("a") }
                .sortedBy { it }
                .map { it.toUpperCase() }
                .forEach { println(it) }



        val myList = listOf(1, 2, 3, 4, 5)

        /**
         * any : 如果至少有一个元素符合给出的判断条件，则返回true。
         */
        val isAny = myList.any { it > 10 } // false
        println("isAny--" + isAny)

        /**
         * all : 如果全部的元素符合给出的判断条件，则返回true。
         */
//        val isAll = myList.all { it > 5 } //false
        val isAll = myList.all { it > 0 } // true
        println("isAll -- " + isAll)


        /**
         * count : 返回符合给出判断条件的元素总数。
         */
        val isCount = myList.count { it > 3 }

        /**
         * fold : 在一个初始值的基础上从第一项到最后一项通过一个函数累积所有的元素
         */
        val foldList = listOf(2, 4, 6, 7, 9)
        val isFold = foldList.fold(3) { total, next ->
            println("total :  " + total + " next : " + next)
            total + next

            /**
            total :  3 next : 2
            total :  5 next : 4
            total :  9 next : 6
            total :  15 next : 7
            total :  22 next : 9

             */
        }
        //             isfold : 31
        println("isfold :" + isFold)


        /**'
         * maxBy ： 根据给定的函数返回最大的一项，如果没有则返回null
         */
        val isMaxBy = listOf(2, 4, 20, 55, 6).maxBy { it } //2
        println("isMaxBy : " + isMaxBy)


        var _date: Long = 0

        println("dateUtils == " + _date.ktToDateString())


    }


    //创建一个 伴生对象
    companion object {
        // extra 的 key
        private val bean = "bean"

        fun startActivitySencond(context: Context, kotlinBean: KotlinBean) {
            val intent = Intent(context, KotlinBeanActivity::class.java)
            intent.putExtra(bean, kotlinBean)
            context.startActivity(intent)
        }
    }

    private class Request(val url: String) {

        fun run() {

            Thread({
                val JsonStr = URL(url).readText()

                Log.d(javaClass.simpleName, JsonStr)
            }).start()


        }

    }
}


